/*
 * Conexion.java
 *
 * Created on 30 de agosto de 2005, 11:45 AM
 *
 * To change this template, choose Tools | Options and locate the template under
 * the Source Creation and Management node. Right-click the template and choose
 * Open. You can then make changes to the template in the Source Editor.
 */
package administrador;
/**
 *
 * @author PabloCalderon
 */
import java.sql.*;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.*;
public class Conexion {
    
    /** Creates a new instance of Conexion */
    private Statement sentenciaSQL;
    private Connection conexion;
    private ResultSet resultado;
    private String user="";// Valores por defecto
    private String pass="";// Defecto
    public String puerto="";// Valores por defecto
    public String server="";// Defecto
    private inicio ini;
    public boolean estado=false;
    
   String DRIVE_NAME="com.mysql.jdbc.Driver";
   String DATABASE="bdbodegacasa";//Valor por Defecto
  
        
    public Conexion(inicio Einicio) {
       ini=Einicio;
    }
    
    public Conexion() {
              
    }
        
    public Conexion(String DBmysql) {
        DATABASE=DBmysql;
      
    }
    
   
    
    //DECLARACION DE METODOS
    
    public boolean conectarBase(String nombre,String clave,String puerto,String server){
    
    this.server=server;
    this.puerto=puerto;    
    this.user=nombre;
    this.pass=clave;
    
    
    boolean establecer=false;     
            try{
               Class.forName(DRIVE_NAME).newInstance();
               String DATABASE_URL="jdbc:mysql://"+server+":"+puerto+"/"+DATABASE+"?"; 
               conexion=DriverManager.getConnection(DATABASE_URL+"user="+user+"&password="+pass);
               establecer=false;
               
               System.out.println("Conexion a la Base Establecida");            
            }catch(Exception e){
                //No conecta la base Error en el password;
                System.out.println("Conexion NO Establecida");  
                System.err.println(e);
                JOptionPane.showMessageDialog(ini,"Error en la Conexion con la Base de Datos","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
    estado=establecer;
    return establecer;        
    }//Fin del metodo ConectarBase




    public boolean conectarBase(String nombre,String clave,String puerto,String dataBase,String server){

    this.server=server;
    this.puerto=puerto;
    this.user=nombre;
    this.pass=clave;
    this.DATABASE=dataBase;


    boolean establecer=false;
            try{
               Class.forName(DRIVE_NAME).newInstance();
               String DATABASE_URL="jdbc:mysql://"+server+":"+puerto+"/"+DATABASE+"?";
               conexion=DriverManager.getConnection(DATABASE_URL+"user="+user+"&password="+pass);
               establecer=true;

               System.out.println("Conexion a la Base Establecida");
            }catch(Exception e){
                //No conecta la base Error en el password;
                System.out.println("Conexion NO Establecida");
                System.err.println(e);
                JOptionPane.showMessageDialog(ini,"Error en la Conexion con la Base de Datos","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
    estado=establecer;
    return establecer;
    }//Fin del metodo ConectarBase



    public Connection getconexion(){
        return conexion;
    }
    public boolean conectarBase(){
    
    
    boolean establecer=false;     
            try{
               Class.forName(DRIVE_NAME).newInstance();
               String DATABASE_URL="jdbc:mysql://localhost/"+DATABASE+"?"; 
               conexion=DriverManager.getConnection(DATABASE_URL+"user="+user+"&password="+pass);
               establecer=false;
               
               System.out.println("Conexion a la Base Establecida");            
            }catch(Exception e){
                //No conecta la base Error en el password;
                System.out.println("Conexion NO Establecida");  
                System.err.println(e);
                JOptionPane.showMessageDialog(ini,"Error en Usuario o Clave","Informacion",JOptionPane.INFORMATION_MESSAGE);
            }
    return establecer;        
    }//Fin del metodo ConectarBase
    
    
    public void cerrarConexion()throws Exception{
            try{
                conexion.close();
                System.out.println("Conexion Cerrada");      
            }catch (SQLException sqle){
                System.out.println("Error al Cerrar Conexion");  
                System.err.println(sqle);      
            }
            
        
    }//Fin del M�todo cerrarConexion
    
    public ResultSet consultarBase(String consulta)
    {
        System.out.println("La consulta es = "+consulta);	     	
        try{
            sentenciaSQL = conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            resultado = sentenciaSQL.executeQuery(consulta);
            
            //verResultados();
            //cerrarConexion();
        }catch (Exception e) 
         {
             System.out.println("No se pudo realizar la consulta");
             System.err.println(e);
            // cerrarConexion();
         }
        return resultado;
     }//Fin del metodo consultarBase
    
    public void ejecutarComando(String comando){
    try{
            System.out.println(comando);
            sentenciaSQL = conexion.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
            sentenciaSQL.execute(comando);
            
            //verResultados();
            //cerrarConexion();
        }catch (Exception e) 
         {
             System.out.println("No se pudo realizar la consulta");
             System.err.println(e);
            // cerrarConexion();
         }
       
    
    }
      
    public String verResultados(ResultSet verResp){
     String areaRes="Ver Resultados:";
        
        try{
           
            
            // Get result set meta data
            ResultSetMetaData rsmd = verResp.getMetaData();
            int numeroCol = rsmd.getColumnCount();
            //areaRes=areaRes+"Numero de Filas Obtenidas son: "+numeroCol+"\n";
            
            areaRes=areaRes+"\n";
            verResp.beforeFirst();
            while(verResp.next()){
//               for(int i=1;i<numeroCol;i++){ NO funca;
//                   areaRes=areaRes+String.valueOf(verResp.getObject(i))+"\n";
//               }
                areaRes=areaRes+verResp.getInt(1)+"\t";
                areaRes=areaRes+verResp.getString(2)+"\n";
               
                
            }
        }catch(SQLException sqle){
            System.out.println("Error al mostrar los resultados de la consulta");
            System.err.println(sqle);
        }
     return areaRes;
    }
    
    public String sacaUsuario(){
    return user;
    }
    
    /*public boolean insertarDatos(String consulta){
    boolean insercion=false;    
       // System.out.println("*****************************************************");
        System.out.println("La insercion es: = "+consulta);
       // System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
        try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
            insercion=true;
        //    System.out.println("Insercion Existosa");
        }catch(SQLException sqle){
            System.out.println("Error al insertar los datos");
            System.err.println(sqle);
        }finally{
            //cerrarConexion();
        }
    return insercion;    
    }*/
    
    public void insertarDatos(String consulta){
    
       // System.out.println("*****************************************************");
        System.out.println("La insercion es: = "+consulta);
       // System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
        try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
    
         System.out.println("Insercion Existosa");
        }catch(Exception sqle){
            System.out.println("Error al insertar los datos");
            System.err.println(sqle);
        }finally{
            //cerrarConexion();
        }
    
    }
    
    public boolean insertarDatosR(String consulta){
    boolean exito=true;
       // System.out.println("*****************************************************");
        System.out.println("La insercion es: = "+consulta);
       // System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
        try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
    
        //    System.out.println("Insercion Existosa");
        }catch(Exception sqle){
            System.out.println("Error al insertar los datos");
            System.err.println(sqle);
            exito=false;
        }finally{
            //cerrarConexion();
        }
    return exito;
    }
    
    public void eliminarFila(String consulta){
       try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
            System.out.println(consulta);
        }catch(SQLException sqle){
            System.out.println("Error al eliminar los datos");
            System.err.println(sqle);
        }finally{
           // cerrarConexion();
        }
    }
    
    public int obtenerFilas(ResultSet r){
    int filas=0;    
        try{
            r.last();
            filas=r.getRow();
           // System.out.println("El numero de Filas"+filas);
            
        }catch(Exception e){
            System.out.println("Error al Obtener numero de Filas");
            System.err.println(e);
        }
       return filas;
    }
    public String[] obtenerColumnas(ResultSet r){
      String[] columnas=null;  
      int numeroCol=0;
      
      
      try {
        // Get result set meta data
        ResultSetMetaData rsmd = r.getMetaData();
        numeroCol = rsmd.getColumnCount();
        //System.out.println("El numero de columnas es:"+numeroCol);
        columnas=new String[numeroCol];
        
      
        // Get the column names; column indices start from 1
        for (int i=1; i<numeroCol+1; i++) {
            columnas[i-1] = rsmd.getColumnName(i).toString();
            // Get the name of the column's table name
            String tableName = rsmd.getTableName(i);
           // System.out.println("Guardo enla posicion="+i+" =>"+columnas[i-1]);
        }
     } catch (SQLException e) {
         System.out.println("Error al Obtener numero de Columnas");
         System.err.println(e);
    }
    
        
        return columnas;
    }
        
     public void actualizarBase(String consulta){

         //  System.out.println("*****************************************************");
       System.out.println("La Modificacion es: = "+consulta);
      //  System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
         try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
            System.out.println("Actualizacion Existosa");
        }catch(Exception sqle){
            System.out.println("Error al actualizar los datos");
            System.err.println(sqle);
        }finally{
           // cerrarConexion();
        }
    }
     
     public boolean actualizarBaseResp(String consulta){
     boolean actualiza=false;
      //  System.out.println("*****************************************************");
       System.out.println("La Modificacion es: = "+consulta);
      //  System.out.println("*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*");
         try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
         //   System.out.println("Actualizacion Existosa");
            actualiza=true;
        }catch(SQLException sqle){
            System.out.println("Error al actualizar los datos");
            System.err.println(sqle);
        }finally{
           // cerrarConexion();
        }
     return actualiza;
    }
     //Metodo utilizado para optener  todas las filas y columnas de una consulta
    public java.util.Vector consulta(String consulta){
        ResultSet  conjuntoResultados=consultarBase(consulta);
        java.util.Vector resultado=new java.util.Vector();
        try{
            while (conjuntoResultados.next()){
            java.util.Vector interno=new java.util.Vector();
            for(int i=1;i<30;i++){
                try{
                    interno.add(conjuntoResultados.getString(i));

                }catch(Exception error){
                    i=30;
                }
            }
            resultado.add(interno);
        }
        }catch(java.sql.SQLException ep){ }
        return resultado;
    }
    //Metodo para verificar si un determinado registro ya existe
    public boolean existeCodigo(String nombreTabla,String campoTabla,String valorIngresado){
        boolean existe=false;
        ResultSet  conjuntoResultados=consultarBase("select "+campoTabla+" from "+nombreTabla);
        try{
            while (conjuntoResultados.next()){
                   if(conjuntoResultados.getString(campoTabla).equals(valorIngresado)){
                       existe=true;
                       break;
                   }
            }
        }catch(java.sql.SQLException ep){ }
        return  existe;
    }
    //Metodo para verificar que tipo de comprovante es
    public String tipoComprobante(String cod_pedido){
        String tipo="";
        ResultSet  conjuntoResultados=consultarBase("select tipo_comprobante from pedido where cod_pedido="+cod_pedido+"");
        try{
            while (conjuntoResultados.next()){
                   if(conjuntoResultados.getString("tipo_comprobante").equals("F")){
                       tipo="F";
                       return tipo;
                   }else
                   if(conjuntoResultados.getString("tipo_comprobante").equals("N")){
                       tipo="N";
                       return tipo;
                   }else
                   if(conjuntoResultados.getString("tipo_comprobante").equals("D")){
                       tipo="D";
                       return tipo;
                   }else
                   if(conjuntoResultados.getString("tipo_comprobante").equals("C")){
                       tipo="C";
                       return tipo;
                   }
            }
        }catch(java.sql.SQLException ep){ }
        return  tipo;
    }
    //esto debido a que se sumaria en el stock nuevamente los productos de la factura
    public boolean verificaAnulacion(String codigoFactura,String tipo_comprobante){
        boolean anulado=false;
        ResultSet  conjuntoResultados=consultarBase("select estato_pe from pedido where cod_pedido="+codigoFactura+" and tipo_comprobante like '"+tipo_comprobante+"'");
        try{
            while (conjuntoResultados.next()){
                   if(conjuntoResultados.getString("estato_pe").equals("N")){
                       anulado=true;
                       break;
                   }
            }
        }catch(java.sql.SQLException ep){ }
        return  anulado;
    }
    //metodo para vaciar las tabllas
    public void limpiar(JTable tablaL){
     int filas=tablaL.getRowCount();
     int col=tablaL.getColumnCount();
            int cont=0;
            while(cont<filas){
                try{
                    for(int i=0;i<col;i++){
                        //System.out.println("valor fila:"+cont+" columnas: "+i);
                        tablaL.setValueAt(null,cont,i);
                        // System.out.println(toma);
                    }
                }catch(Exception e){};
                cont++;
            }
     }

    public boolean eliminarFilaResp(String consulta){
     boolean borro=false;
       try{
            sentenciaSQL = conexion.createStatement();
            sentenciaSQL.executeUpdate(consulta);
            borro=true;
      //      System.out.println("Eliminacion Existosa");
        }catch(SQLException sqle){
            System.out.println("Error al eliminar los datos");
            System.err.println(sqle);
        }finally{
           // cerrarConexion();
        }
    return borro;
    }

    
}